package de.dhbw.karlsruhe.picsim.model.actions;

import org.jetbrains.annotations.NotNull;

/**
 * Created by IntelliJ IDEA.
 * User: goesen
 * Date: Apr 12, 2010
 * Time: 9:28:21 PM
 */
public interface StatusAction extends PicAction {
    /**
     * @return das Flag welches der Befehl beeinflussen kann
     */
    @NotNull
    AffectedStatus getAffectedStatus();

    /**
     * false wenn das bit gecleart werden soll, true wenn es gesetzt werden soll
     *
     * @return der neue Wert des Flags
     */
    @SuppressWarnings({"BooleanMethodNameMustStartWithQuestion"})
    boolean getNewValue();


    enum AffectedStatus {
        ZERO {
            @Override
            public int getPosition() {
                return 2;
            }},
        CARRY {
            @Override
            public int getPosition() {
                return 0;
            }},
        DIGIT_CARRY {
            @Override
            public int getPosition() {
                return 1;
            }},
        TIME_UP {
            @Override
            public int getPosition() {
                return 4;
            }};

        /**
         * @return die Position des Flags im Status Register
         */
        public abstract int getPosition();

    }
}
